home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 26
/
Cream of the Crop 26.iso
/
os2
/
pvm34b3.zip
/
pvm34b3
/
pvm3
/
src
/
mppchunk.h
< prev
next >
Wrap
C/C++ Source or Header
|
1997-07-22
|
6KB
|
181 lines
/* $Id: mppchunk.h,v 1.5 1997/07/09 13:52:35 pvmsrc Exp $ */
/*
* PVM version 3.4: Parallel Virtual Machine System
* University of Tennessee, Knoxville TN.
* Oak Ridge National Laboratory, Oak Ridge TN.
* Emory University, Atlanta GA.
* Authors: J. J. Dongarra, G. E. Fagg, M. Fischer
* G. A. Geist, J. A. Kohl, R. J. Manchek, P. Mucci,
* P. M. Papadopoulos, S. L. Scott, and V. S. Sunderam
* (C) 1997 All Rights Reserved
*
* NOTICE
*
* Permission to use, copy, modify, and distribute this software and
* its documentation for any purpose and without fee is hereby granted
* provided that the above copyright notice appear in all copies and
* that both the copyright notice and this permission notice appear in
* supporting documentation.
*
* Neither the Institutions (Emory University, Oak Ridge National
* Laboratory, and University of Tennessee) nor the Authors make any
* representations about the suitability of this software for any
* purpose. This software is provided ``as is'' without express or
* implied warranty.
*
* PVM version 3 was funded in part by the U.S. Department of Energy,
* the National Science Foundation and the State of Tennessee.
*/
#ifndef __mppchunk_h__
#define __mppchunk_h__
#include "mppmsg.h"
/* exportable parameters */
extern int MAXSEQ; /* from mppchunk.c */
/* Some parameters that should be made runtime/startup changeable */
#define TAGBASE
#define NRBUFS 4
#define NSBUFS 4
#define DFN_MAXSEQ 0xffff
#define INCRSEQ(_seq,_maxseq) (((_seq)++)&(_maxseq))
#define NEXTCHUNKSEQ(_seq, _delta) (((_seq) + (_delta)) & 0xffff )
/* array of mids of outstanding messages to be sent to backend */
#define NMPPSBUFMIDS 32
#define MPPMIDFREE -1
#define MPPMIDALLOCED -2
#if !defined(IMA_NODE)
#define CHUNK struct pkt
#define CHUNK_NEW pk_new
#define CHUNK_NEXT pk_link
#define CHUNK_PREV pk_rlink
#define CHUNK_SEQ pk_seq
#define CHUNK_SRC pk_src
#define CHUNK_LEN pk_len
#define CHUNK_DAT pk_dat
#define CHUNK_MAX pk_max
#define CHUNK_FREE pk_free
#define CHUNK_RIP pk_rip
#include "pkt.h"
#else
#define CHUNK struct frag
#define CHUNK_NEW fr_new
#define CHUNK_NEXT fr_link
#define CHUNK_PREV fr_rlink
#define CHUNK_SEQ fr_seq
#define CHUNK_SRC fr_src
#define CHUNK_LEN fr_len
#define CHUNK_DAT fr_dat
#define CHUNK_MAX fr_max
#define CHUNK_FREE fr_unref
#define CHUNK_RIP fr_rip
#include "pvmfrag.h"
#endif
/* ======== Type declarations ========= */
typedef CHUNK *CHUNK_PTR;
/* Information used for sending/receiving packets to/from tasks.
Keeps track of the send sequence number and the tagbase used for '
sending data. Points to a pkt_order structure for receives so that
reordering happens in a sane manner.
*/
struct mpp_directi
{
int rtid; /* task id of the remote task sender/receiver */
int rpid; /* pid of the remote proc, used by puma */
int appid; /* used for by PUMA for host to node send */
int tagbase; /* base for sending/receive messages */
int nbufs; /* nbuffers to use before wrap */
int sseq; /* sequence number to use for send */
struct chunk_order *ordering; /* ordering structure for receive sequencing */
};
typedef struct mpp_directi MPP_DIRECTI;
typedef struct mpp_directi *MPP_DIRECTI_PTR;
struct chunk_order
{
int seq; /* sequence number for this task */
int nbufs; /* number of buffers that we have to sequence */
int *bufseq; /* sequence number of the ith buffer for this task */
CHUNK *oochunks; /* list of out-of-order packets */
};
typedef struct chunk_order CHUNK_ORDER;
typedef struct chunk_order *CHUNK_ORDER_PTR;
struct msg_info
{
int mid; /* message id from message-passing substrate */
CHUNK *rchunk; /* posted chunk for receive */
int src; /* source for this message */
int tag; /* tag for this message */
int mxsize; /* max size of the message */
int hsize; /* size of header */
info_t info[MPPINFOSIZE]; /* info array 8 for pgons, 1 for MPI */
};
typedef struct msg_info MSG_INFO;
typedef struct msg_info *MSG_INFO_PTR;
/* ----- Prototype Declarations ------- */
/* ====== Functions that return MPP_DIRECTI_PTR structs ======= */
MPP_DIRECTI_PTR new_directstruct __ProtoGlarp__( (int, int) );
/* int nsbufs -- number of send buffers
* int nrbufs -- number of receive buffers
*/
MPP_DIRECTI_PTR new_vdirectstruct __ProtoGlarp__( (int nstructs, int nsbufs, int nrbufs) );
/* int nstructs -- number of structures to alloc
* int nsbufs -- number of send buffers
* int nrbufs -- number of receive buffers
*/
/* ====== Functions that return CHUNK_ORDER_PTR ======= */
CHUNK_ORDER_PTR new_chunkostruct __ProtoGlarp__( (int nbufs) );
/* nbufs -- number of receive buffers */
CHUNK_ORDER_PTR new_vchunkostruct __ProtoGlarp__( (int nstructs, int nbufs) );
/* nstructs -- number of structures
* nbufs -- number of receive buffers
*/
/* ====== Functions that return struct CHUNK * ======= */
CHUNK_PTR ochunk_delete __ProtoGlarp__( (CHUNK_ORDER_PTR) );
CHUNK_PTR read_chunk __ProtoGlarp__( (MSG_INFO_PTR, int *, int *, int *, int , int, MSGFUNC_PTR) );
/* ====== Functions that return MSG_INFO_PTR ======= */
MSG_INFO_PTR init_recv_list __ProtoGlarp__( (int, int, int, int, int, MSGFUNC_PTR) );
/* ====== Functions that return int ======= */
int init_directstruct __ProtoGlarp__( ( MPP_DIRECTI_PTR, int ));
int order_chunk __ProtoGlarp__( (CHUNK_ORDER_PTR, int, CHUNK_PTR ));
int ochunk_insert __ProtoGlarp__( (CHUNK_ORDER_PTR, CHUNK_PTR) );
int post_receive __ProtoGlarp__( (MSG_INFO_PTR , int, int, int, int, int, int, MSGFUNC_PTR) );
int post_send __ProtoGlarp__( (char * , int, MPP_DIRECTI_PTR, MSGFUNC_PTR) );
int update_seq_numbers __ProtoGlarp__( (CHUNK_ORDER_PTR) );
int pvm_init_asynch_list __ProtoGlarp__( (msgmid_t *, CHUNK_PTR *, int) );
int pvm_assign_chunk __ProtoGlarp__( (CHUNK_PTR *, CHUNK_PTR, int) );
int pvm_assign_mid __ProtoGlarp__( (msgmid_t *, int, int) );
int pvm_mpp_find_midx __ProtoGlarp__( (msgmid_t *, CHUNK_PTR *, int *, int, MSGFUNC_PTR) );
/* ====== Functions that return struct CHUNK * ======= */
#endif